/**
 * @file main.h
 * @author lcz (you@domain.com)
 * @brief 
 * @version 0.1
 * @date 2022-11-09
 * 
 * @copyright Copyright (c) 2022
 * 
 */


#ifndef MAIN_H
#define MAIN_H
// command line input
#define CLI_INPUT_SIZE 1024
#define CLI_MAX_ARG_COUNT 10

// ESC 后面仅有两个字符的宏 利用#Pn #号将输入的参数转换成字符串
#define ESC_CMD2(Pn, cmd) "\x1b[" #Pn #cmd
// 实现清屏的宏
#define ESC_CLEAR_SCREEN ESC_CMD2(2, J)
// 设置光标位置的字符串
#define ESC_MOVE_CURSOR(row, col) "\x1b[" #row ";" #col "H"
// 红色及标准颜色
#define ESC_COLOR_ERROR ESC_CMD2(31, m)
#define ESC_COLOR_DEFAULT ESC_CMD2(39, m)

// 定义命令行解释器
typedef struct _cli_cmd_t
{
    // 指令名称
    const char *name;
    // 用法解析
    const char *usage;
    // 真正的方法
    int (*do_func)(int argc, char **argv);
} cli_cmd_t;

// 定义命令行
typedef struct _cli_t
{
    // 输入的命令
    char curr_input[CLI_INPUT_SIZE];
    const cli_cmd_t *cmd_start; // 命令起始
    const cli_cmd_t *cmd_end;   // 命令起始
    const char *promot;         // 提示符
} cli_t;



#endif 








